import Router from '@/router';
const whiteList = ['/login'];
import useUserStore from '@/store/modules/userinfo';
import useCommonStore from '@/store/modules/common';
import { Local, Session } from '@/utils/storage';
import { getConfigKey } from '@/api/management/systemManage/systemConfig';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
// 全局前置守卫
// 路由在白名单，直接跳转
// 路由不是白名单，判断缓存有没有token;没有token的直接跳到登录页
// 有token的。判断store里面有没有菜单；
// store没有菜单去缓存拿请求菜单和用户信息，并将菜单和用户信息设置到store（防止刷新）
// 缓存也没有就去请求；并将菜单和用户信息设置到缓存和store
Router.beforeEach((to, from, next) => {
	NProgress.start();
	if (whiteList.indexOf(to.path) > -1) {
		next();
		return;
	}
	const userStore = useUserStore();

	if (Local.get('access_token')) {
		if (!userStore.menu || !userStore.menu.length) {
			if (!Session.get('menu') || !Session.get('menu').length) {
				// 缓存也没有去请求
				return Promise.all([userStore.getMenu(), userStore.getUserInfo()]).then(() => {
					// hack方法 确保addRoutes已完成
					next({ ...to, replace: true });
				});
				// next({ path: to.path });
			} else {
				// 从缓存设置菜单、用户信息等
				userStore.set_store_form_storage();
				// hack方法 确保addRoutes已完成
				next({ ...to, replace: true });
			}
		} else {
			next();
		}
		// 获取echarts图间隔
		if (useCommonStore().labelTimeLen === undefined) {
			getConfigKey('sys.labletime.length').then((res: ApiResponse) => {
				if (res.code !== 0) {
					return;
				}
				const len = parseInt(res.data);
				if (!isNaN(len)) {
					useCommonStore().setLabelTimeLen(len);
				}
			});
		}
	} else {
		next('/login');
	}
});

// 全局后置钩子
Router.afterEach((to, from) => {
	NProgress.done();
});
